2 #ifndef FRAMELIB_MULTICHANNEL_H 3 #define FRAMELIB_MULTICHANNEL_H 36 struct MultiChannelInput
45 struct MultiChannelOutput
47 std::vector <ConnectionInfo> mConnections;
56 {
setIO(nIns, nOuts); }
70 virtual void setFixedInput(
unsigned long idx,
double *input,
unsigned long size) {};
75 virtual void reset(
double samplingRate,
unsigned long maxBlockSize) {}
94 void setIO(
unsigned long nIns,
unsigned long nOuts,
unsigned long nAudioChans = 0)
116 std::vector <FrameLib_MultiChannel *>::iterator removeOutputDependency(
FrameLib_MultiChannel *
object);
120 void updateConnections() {
if (mQueue) mQueue->add(
this); }
122 void clearConnection(
unsigned long inIdx);
123 void removeConnection(
unsigned long inIdx);
126 virtual void outputUpdate();
144 std::vector <FrameLib_MultiChannel *> mOutputDependencies;
145 std::vector <MultiChannelInput> mInputs;
154 enum AtrributeList { kInputs };
165 virtual std::string
inputInfo(
unsigned long idx,
bool verbose);
166 virtual std::string
outputInfo(
unsigned long idx,
bool verbose);
175 virtual bool inputUpdate();
179 static ParameterInfo sParamInfo;
188 enum AtrributeList { kOutputs };
199 virtual std::string
inputInfo(
unsigned long idx,
bool verbose);
200 virtual std::string
outputInfo(
unsigned long idx,
bool verbose);
209 virtual bool inputUpdate();
213 static ParameterInfo sParamInfo;
226 :
FrameLib_MultiChannel(T::
getType(), context), mContext(context), mAllocator(context), mSerialisedParameters(serialisedParameters->size()), mOwner(owner)
230 mBlocks.push_back(
new T(context, serialisedParameters, owner));
234 mSerialisedParameters.write(serialisedParameters);
244 for (
unsigned long i = 0; i <
getNumOuts(); i++)
258 for (std::vector <FrameLib_Block *> :: iterator it = mBlocks.begin(); it != mBlocks.end(); it++)
264 virtual void setFixedInput(
unsigned long idx,
double *input,
unsigned long size)
266 if (idx < mFixedInputs.size())
268 mFixedInputs[idx].assign(input, input + size);
269 updateFixedInput(idx);
282 mAudioTemps[0] = (
double *) mAllocator->alloc(
sizeof(
double) * blockSize *
getNumAudioOuts());
284 mAudioTemps[i] = mAudioTemps[0] + (i * blockSize);
289 std::fill_n(outs[i], blockSize, 0.0);
293 for (std::vector <FrameLib_Block *> :: iterator it = mBlocks.begin(); it != mBlocks.end(); it++)
295 (*it)->blockUpdate(ins, &mAudioTemps[0], blockSize);
298 for (
unsigned long j = 0; j <
blockSize; j++)
299 outs[i][j] += mAudioTemps[i][j];
305 mAllocator->dealloc(mAudioTemps[0]);
312 virtual void reset(
double samplingRate,
unsigned long maxBlockSize)
314 mSamplingRate = samplingRate;
315 mMaxBlockSize = maxBlockSize;
317 for (std::vector <FrameLib_Block *> :: iterator it = mBlocks.begin(); it != mBlocks.end(); it++)
318 (*it)->reset(samplingRate, maxBlockSize);
325 virtual std::string
objectInfo(
bool verbose) {
return mBlocks[0]->objectInfo(verbose); }
326 virtual std::string
inputInfo(
unsigned long idx,
bool verbose) {
return mBlocks[0]->inputInfo(idx, verbose); }
327 virtual std::string
outputInfo(
unsigned long idx,
bool verbose) {
return mBlocks[0]->outputInfo(idx, verbose); }
328 virtual std::string
audioInfo(
unsigned long idx,
bool verbose) {
return mBlocks[0]->audioInfo(idx, verbose); }
339 void updateFixedInput(
unsigned long idx)
341 for (
unsigned long i = 0; i < mBlocks.size(); i++)
342 mBlocks[i]->
setFixedInput(idx, &mFixedInputs[idx][0], mFixedInputs[idx].size());
347 virtual bool inputUpdate()
351 unsigned long nChannels = 1;
352 unsigned long cChannels = mBlocks.size();
354 for (
unsigned long i = 0; i <
getNumIns(); i++)
360 bool numChansChanged = nChannels != cChannels;
364 if (nChannels > cChannels)
366 mBlocks.resize(nChannels);
368 for (
unsigned long i = cChannels; i < nChannels; i++)
370 mBlocks[i] =
new T(mContext, &mSerialisedParameters, mOwner);
371 mBlocks[i]->reset(mSamplingRate, mMaxBlockSize);
376 for (
unsigned long i = nChannels; i < cChannels; i++)
379 mBlocks.resize(nChannels);
384 for (
unsigned long i = 0; i <
getNumOuts(); i++)
387 for (
unsigned long i = 0; i <
getNumOuts(); i++)
388 for (
unsigned long j = 0; j < nChannels; j++)
393 for (
unsigned long i = 0; i <
getNumIns(); i++)
399 for (
unsigned long i = 0; i <
getNumIns(); i++)
403 for (
unsigned long j = 0; j < nChannels; j++)
406 mBlocks[j]->addConnection(connection.
mObject, connection.
mIndex, i);
411 for (
unsigned long j = 0; j < nChannels; j++)
416 return numChansChanged;
425 std::vector <FrameLib_Block *> mBlocks;
426 std::vector <std::vector <double> > mFixedInputs;
430 unsigned long mMaxBlockSize;
431 double mSamplingRate;
433 std::vector<double *> mAudioTemps;
ObjectType
Definition: FrameLib_Types.h:24
virtual std::string objectInfo(bool verbose=false)
Definition: FrameLib_Object.h:68
virtual FrameType outputType(unsigned long idx)
Definition: FrameLib_Multichannel.h:331
Definition: FrameLib_Multichannel.h:152
unsigned long getInputNumChans(unsigned long inIdx)
Definition: FrameLib_Multichannel.cpp:52
Definition: FrameLib_Parameters.h:21
unsigned long getNumIns()
Definition: FrameLib_Object.h:38
virtual void reset(double samplingRate, unsigned long maxBlockSize)
Definition: FrameLib_Multichannel.h:312
void setIO(unsigned long nIns, unsigned long nOuts, unsigned long nAudioChans=0)
Definition: FrameLib_Multichannel.h:94
virtual FrameType outputType(unsigned long idx)
Definition: FrameLib_Multichannel.h:171
Definition: FrameLib_Context.h:10
virtual FrameType inputType(unsigned long idx)
Definition: FrameLib_Multichannel.h:330
static bool handlesAudio()
Definition: FrameLib_Multichannel.h:77
virtual void addConnection(FrameLib_MultiChannel *object, unsigned long outIdx, unsigned long inIdx)
Definition: FrameLib_Multichannel.cpp:14
static bool handlesAudio()
Definition: FrameLib_Multichannel.h:323
Definition: FrameLib_Parameters.h:34
virtual std::string outputInfo(unsigned long idx, bool verbose)
Definition: FrameLib_Multichannel.h:327
virtual const FrameLib_Parameters * getParameters()
Definition: FrameLib_Multichannel.h:168
ManagedPointer< FrameLib_ConnectionQueue, &Global::getConnectionQueue, &Global::releaseConnectionQueue > ConnectionQueue
Definition: FrameLib_Context.h:72
virtual std::string objectInfo(bool verbose)
Definition: FrameLib_Multichannel.h:325
virtual void blockUpdate(double **ins, double **outs, unsigned long blockSize)
Definition: FrameLib_Multichannel.h:74
virtual std::string outputInfo(unsigned long idx, bool verbose=false)
Definition: FrameLib_Object.h:70
virtual FrameType inputType(unsigned long idx)
Definition: FrameLib_Multichannel.h:170
Definition: FrameLib_Object.h:15
virtual bool isConnected(unsigned long inIdx)
Definition: FrameLib_Multichannel.cpp:47
virtual FrameType inputType(unsigned long idx)
Definition: FrameLib_Multichannel.h:204
Definition: FrameLib_Multichannel.h:24
virtual std::string audioInfo(unsigned long idx, bool verbose)
Definition: FrameLib_Multichannel.h:328
Definition: FrameLib_Multichannel.h:17
unsigned long getNumAudioOuts()
Definition: FrameLib_Object.h:41
virtual std::string inputInfo(unsigned long idx, bool verbose=false)
Definition: FrameLib_Object.h:69
ObjectType getType()
Definition: FrameLib_Object.h:27
Definition: FrameLib_ConnectionQueue.h:11
Definition: FrameLib_Multichannel.h:220
ConnectionInfo(FrameLib_Block *object=NULL, unsigned long idx=0)
Definition: FrameLib_Multichannel.h:26
virtual void setFixedInput(unsigned long idx, double *input, unsigned long size)
Definition: FrameLib_Multichannel.h:264
virtual const FrameLib_Parameters * getParameters()
Definition: FrameLib_Multichannel.h:202
virtual void blockUpdate(double **ins, double **outs, unsigned long blockSize)
Definition: FrameLib_Multichannel.h:277
FrameLib_Expand(FrameLib_Context context, FrameLib_Parameters::Serial *serialisedParameters, void *owner)
Definition: FrameLib_Multichannel.h:225
Definition: FrameLib_Object.h:95
FrameLib_Block * mObject
Definition: FrameLib_Multichannel.h:28
size_t blockSize(void *ptr)
Definition: FrameLib_Memory.cpp:23
Definition: FrameLib_Parameters.h:153
virtual std::string inputInfo(unsigned long idx, bool verbose)
Definition: FrameLib_Multichannel.h:326
virtual void deleteConnection(unsigned long inIdx)
Definition: FrameLib_Multichannel.cpp:8
virtual ~FrameLib_MultiChannel()
Definition: FrameLib_Multichannel.h:62
Definition: FrameLib_Types.h:25
void setIO(unsigned long nIns, unsigned long nOuts, unsigned long nAudioChans=0)
Definition: FrameLib_Object.h:31
virtual FrameType outputType(unsigned long idx)
Definition: FrameLib_Multichannel.h:205
std::vector< MultiChannelOutput > mOutputs
Definition: FrameLib_Multichannel.h:134
ConnectionInfo getInputChan(unsigned long inIdx, unsigned long chan)
Definition: FrameLib_Multichannel.h:104
unsigned long getNumOuts()
Definition: FrameLib_Object.h:39
virtual void clearConnections()
Definition: FrameLib_Multichannel.cpp:30
Definition: FrameLib_Parameters.h:129
unsigned long mIndex
Definition: FrameLib_Multichannel.h:29
FrameType
Definition: FrameLib_Types.h:25
Definition: FrameLib_Multichannel.h:186
FrameLib_MultiChannel(ObjectType type, FrameLib_Context context, unsigned long nIns, unsigned long nOuts)
Definition: FrameLib_Multichannel.h:54
ManagedPointer< FrameLib_LocalAllocator, &Global::getAllocator, &Global::releaseAllocator > Allocator
Definition: FrameLib_Context.h:71
virtual void setFixedInput(unsigned long idx, double *input, unsigned long size)
Definition: FrameLib_Multichannel.h:70
unsigned long getNumAudioChans()
Definition: FrameLib_Object.h:42
virtual void reset(double samplingRate, unsigned long maxBlockSize)
Definition: FrameLib_Multichannel.h:75
virtual const FrameLib_Parameters * getParameters()
Definition: FrameLib_Multichannel.h:333
FrameLib_MultiChannel(ObjectType type, FrameLib_Context context)
Definition: FrameLib_Multichannel.h:58
~FrameLib_Expand()
Definition: FrameLib_Multichannel.h:250